import com.beans.UserController2;
import com.beans.UserController3;
import com.beans.UserController4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: H_tao_X
 * Date: 2022-11-17
 * Time: 23:13
 */
// 用来实现 对象的注入
public class App2 {
    public static void main(String[] args) {

        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        UserController2 userController2 = context.getBean("userController2",UserController2.class);
        userController2.sayHi();

        UserController3 userController3 = context.getBean("userController3",UserController3.class);
        userController3.sayHi();

        UserController4 userController4 = context.getBean("userController4",UserController4.class);
        userController4.sayHi();
    }
}
// 三种对象注入的区别
    // 1. 属性注入：写法简单，但是通用性不好，只能在IoC容器下
    // 非 IoC 容器下 会出现问题

    // 2. Setter 注入
    // 早期 Spring 版本推荐，但是通用性没有 构造方法好

    // 3. 构造方法
    // 通用性 更好，他能确保在使用注入对象之前，此注入对象一定初始化过
    //  Spring 版本后期推荐

// @Autowired 和 @Resource 的区别
    // 1. 出身不同，@Resource 来自于 JDK
    // @Autowired 是 Spring 框架提供

    // 2. 用法不同：@Resource 不支持构造方法

    // 3. 支持的参数不同：@Resource 支持更多的参数
    // 如 name，type，而 @Resource 只支持 required 参数
